  -=( 7A69#11 )=--=( art14 )=--=( Jugeteando con el Modem )=--=( tuxisuau )=-

Holas, soy tuxisuau y me podeis privmsg-ar en varias redes de IRC (IRC-Hispano 
sobretodo), en canales sobre unix, linux, administracion de sistemas, etc.

Esta vez os hablare un poco de los modems, tras trastear unos dias con estos. 
Hace unos dias estaba muy aburrido, pille el manual del modem y me dedique a 
leer la referencia de comandos (interesante! voy a probar alguno). Para mis 
primeras pruebas use "echo >/dev/ttyS0" y "cat /dev/ttyS0", un metodo 
superrastrero y cutre, que "mas o menos" tiraba... al final me decidi a 
apt-pillar minicom, un prog de comunicaciones con emulacion VT102 y ANSI. Por 
cierto, si usais alguna distribucion no-debian, os aconsejo el canvio...

Este articulo pretende ser tan solo una introduccion, de manera que no 
profundizare demasiado, lo unico que intento es despertar vuestra curiosidad...

*** Abramos minicom...
Welcome to minicom 1.83.1

OPTIONS: History Buffer, F-key Macros, Search History Buffer, I18n 
Compiled on Apr  6 2001, 13:24:33.

Press CTRL-A Z for help on special keys
                                                                               
                          
ATZ                                                                            
                          
OK
*** Que bonito, verdad? :)

Bien, minicom es superfacil de usar y guiado por menus, de manera que tampoco 
me pondre a explicar como funciona, puesto que dispone de extensa ayuda...

Lo primero que hace minicom es mandar un ATZ (reset) a nuestro modem. Con ello 
el modem pasa a nuestra disposicion y nos manda OK para hacernos entender que 
ha ejecutado correctamente la orden que le hemos mandado. Si ni tan solo 
llegamos a este punto, quiza tengamos algun problema de permisos o tengamos 
que decirle a nuestro minicom donde esta el modem... Si teneis un winmodem, 
quiza tengais suerte y encontreis un driver por ahi, aunque de todas formas, 
es dificil y no sera lo mismo.

Ahora seria una buena idea probar...

ATDT;                                                                          
                          
Con esto nuestro modem deberia descolgar como si quisiera marcar pero volver 
otra vez al modo de comandos. Lo mas probable es que podamos oir el tono de 
invitacion a la marcacion y si nos esperamos un rato, el contestador de la 
timo...

Aqui podemos practicar el arte de marcar tonos multifrecuencia...

ATDT1;

Hemos marcado un uno (1) :)

Es muy importante el ;, ya que si no lo ponemos, el modem marcara y intentara 
establecer una conexion, no volvera al modo comandos hasta que conecte o de un 
error estilo NO CARRIER, BUSY, etc.

Cuando nos cansemos de hacer experimentos, podemos colgar:

ATH0

Con esto el modem colgara de forma pacifica. Tambien colgaremos si mandamos un 
ATZ (reset) o si el modem intenta establecer una conexion y falla.

Ahora que estamos offline, podemos probar algunos comandos que no necesitan la 
linea...

AT$

*** mi modem que es muy simpatico, responde...
HELP,  Command Quick Reference (CTRL-S to Stop, CTRL-C to Cancel)

&$    HELP, Ampersand Commands       Mn    n=0  Speaker OFF               
A/    Repeat Last Command                  n=1  Speaker ON Until CD       
A>    Continuously Repeat Command          n=2  Speaker Always ON         
AT    Command Mode Prefix                  n=3  Speaker OFF During Dial   
A     Answer Call                    On    n=0  Return Online             
Bn    n=0  V32 Mode/CCITT Answer Seq       n=1  Return Online & Retrain   
      n=1  Bell Answer Seq           P     Pulse Dial                     
Dn    Dial a Telephone Number        Qn    n=0  Result Codes Sent         
      n=0..9#*TPR,;W@!()-                  n=1  Quiet (No Result Codes)   
DL    Dial Last Phone Number               n=2  Verbose/Quiet ON Answer   
DSn   Dial Stored Phone Number       Sr=n  Sets Register "r" to "n"       
D$    HELP, Dial Commands            Sr?   Query Register "r"             
En    n=0  No Command Echo           S$    HELP, S Registers              
      n=1  Echo Command Chars        T     Tone Dial                      
Fn    n=0  Online Echo               Vn    n=0  Numeric Responses         
      n=1  No Online Echo                  n=1  Verbal Responses          
Hn    n=0  ON Hook (Hang Up)         Xn    n=0  Basic Result Codes        
      n=1  OFF Hook                        n=1  Extended Result Codes     
In    n=0  Product Code                    n=2-4  Advanced Result Codes   
      n=1  Checksum                  Yn    n=0  Next Reset to &W0 settings
      n=2  RAM Test                        n=1  Next Reset to &W1 settings
      n=3  Product ID string               n=2  Next Reset to &F0 settings     
      n=4  Current Settings                n=3  Next Reset to &F1 settings     
      n=5  NVRAM Settings                  n=4  Next Reset to &F2 settings     
      n=6  Link Diagnostics          Zn    n=0  Yn
      n=7  Product Configuration           n=1  Reset to &W0 settings     
      n=9  PnP Enumeration Screen          n=2  Reset to &W1 settings     
      n=11 Link Diagnostics                n=3  Reset to &F0 settings     
Ln    n=0  Lowest Speaker Volume           n=4  Reset to &F1 settings     
      n=1  Low Speaker Volume              n=5  Reset to &F2 settings     
      n=2  Medium Speaker Volume     +++   Escape Code                    
      n=3  Highest Speaker Volume      $     HELP,  Command Summary         

OK
*** ya puestos
ATD$
HELP, Dial Commands (CTRL-S to Stop, CTRL-C to Cancel)

0-9 Digits to Dial 
*   Auxiliary Tone Dial Digit
#   Auxiliary Tone Dial Digit
T   Tone Dialing
P   Pulse Dialing
R   Call an Originate Only Modem
,   Pause (Wait for S8 Time)
/   Short Delay
;   Remain in Command Mode After Dialing
W   Wait for 2nd Dial Tone (X2,X4)
@   Wait for an Answer (X3-X4)
!   Flash Switch Hook

OK
ATS$
HELP, S Register Functions (CTRL-S to Stop, CTRL-C to Cancel)

S0  Ring to Answer ON                  S27 Bit Mapped                     
S1  Counts # of Rings                        1 = V21 Mode                 
S2  Escape Code Char                         2 = Disable TCM              
S3  Carriage Return Char                     4 = Disable V32              
S4  Line Feed Char                           8 = Disable 2100hz           
S5  Backspace Char                          16 = Enable V23 Fallback      
S6  Wait Time/Dial Tone (sec)               32 = Disable V32bis           
S7  Wait Time/Carrier (sec)                 64 = Reserved                 
S8  Comma Time (sec)                       128 = Software Compatibility Mode
S9  Carrier Detect Time (1/10sec)      S28 V32 Handshake Time (1/10sec)   
S10 Carrier Loss Time (1/10sec)        S29 V.21 answer mode fallback timer  
S11 Dial Tone Spacing (msec)           S30 Reserved
S12 Escape Code Time (1/50sec)         S31 Reserved       
S13 Bit Mapped                         S32 Connection bit mapped operations.
      1 = Reset ON DTR Loss                  1 = V.8 Call Indicate enable  
      2 = Reduced Non-ARQ TX Buffer          2 = Enable V.8 mode           
      4 = Set DEL=Backspace                  4 = Reserved   
      8 = Do DS0 ON DTR                      8 = Disable V.34 modulation     
     16 = Do DS0 ON Reset                   16 = Disable V.34+ modulation
     32 = Reserved                          32 = Disable x2 modulation
     64 = Disable Quick Retrains            64 = Disable V.90 modulation 
    128 = Escape Code Hang Up              128 = Reserved                   
S14 Reserved                           S33 V.34 & V.34+ Connection setup  
S15 Bit Mapped                             bit mapped control flags.        
      1 = MNP/V.42 Disabled in V.22          1 = Disable 2400 Symbol rate  
      2 = MNP/V.42 Disabled in V.22bis       2 = Disable 2743 Symbol rate  
      4 = MNP/V.42 Disabled in V.32          4 = Disable 2800 Symbol rate  
      8 = Disable MNP Handshake              8 = Disable 3000 Symbol rate  
     16 = Disable MNP Level 4               16 = Disable 3200 Symbol rate  
     32 = Disable MNP Level 3               32 = Disable 3429 Symbol rate  
     64 = Unusual MNP-Incompatibility       64 = Reserved                   
    128 = Disable V.42                     128 = Disable Shaping            
    136 = Disable V.42 Detect Phase    S34 V.34 & V.34+ Connection setup  
S16 Test Modes                             bit mapped control flags.        
     1 = Reserved                           1 = Disable 8S-2D trellis encoding
     2 = Dial Test                          2 = Disable 16S-4D trellis encoding
     4 = Reserved                           4 = Disable 32S-2D trellis encoding
     8 = Reserved                           8 = Disable 64S-4D trellis encoding
    16 = Reserved                          16 = Disable Non linear coding
    32 = Reserved                          32 = Disable TX level deviation
    64 = Reserved                          64 = Disable Pre-emphasis
   128 = Reserved                         128 = Disable Pre-coding
S17 Reserved                           S35 Reserved                       
S18 &Tn Test Timeout (sec)             S36 Reserved                       
S19 Inactivity Timeout (min)           S37 Reserved                       
S20 Reserved                           S38 Disconnect Wait Time (sec)     
S21 Break Length (1/100sec)            S39 Reserved                       
S22 Xon Char                           S40 Reserved                       
S23 Xoff Char                          S41 Reserved                       
S24 Reserved                           S42 Reserved                       
S25 DTR Recognition Time (1/100sec)    S43 Reserved                       
S26 Reserved                       

OK
AT&$
HELP, Ampersand Commands (CTRL-S to Stop, CTRL-C to Cancel)

&An   n=0  Disable /ARQ Result Codes   &Rn   n=1  Ignore RTS              
      n=1  Enable /ARQ Result Codes          n=2  RX to DTE/RTS high      
      n=2  Enable /Modulation Codes    &Sn   n=0  DSR Always ON           
      n=3  Enable /Extra Result Codes        n=1  Modem Controls DSR      
&Bn   n=0  Floating DTE Speed          &Tn   n=0  End Test                
      n=1  Fixed DTE Speed                   n=1  Analog Loopback (ALB)   
      n=2  DTE Speed Fixed When ARQ          n=3  Digital Loopback (DLB)  
&Cn   n=0  CD Always ON                      n=4  Grant Remote DLB        
      n=1  Modem Controls CD                 n=5  Deny Remote DLB         
&Dn   n=0  Ignore DTR                        n=6  Remote Digital Loopback 
      n=1  On-Line Command Mode              n=7  Remote DLB With Self Test
      n=2  DTE Controls DTR                  n=8  ALB With Self Test      
      n=3  Reset ON DTR Loss           &Un   n=0  Variable link rate floor.
&Fn   n=0  Load Factory 0, no FC             n=1  Minimum link rate 300 bps
      n=1  Load Factory 1, HW FC             n=2  Minimum link rate 1200 bps
      n=2  Load Factory 2, SW FC             n=3  Minimum link rate 2400 bps
&Gn   n=0  No Guard Tone                     n=4  Minimum link rate 4800 bps
      n=1  550 Hz Guard Tone                 n=5  Minimum link rate 7200 bps
      n=2  1800 Hz Guard Tone                n=6  Minimum link rate 9600 bps
&Hn   n=0  Disable TX Flow Control           n=7  Minimum link rate 12000 bps
      n=1  CTS                               n=8  Minimum link rate 14400 bps
      n=2  Xon/Xoff                          n=9  Minimum link rate 16800 bps
      n=3  CTS and Xon/Xoff                  n=10 Minimum link rate 19200 bps
&In   n=0  Disable RX Flow Control           n=11 Minimum link rate 21600 bps
      n=1  Xon/Xoff                          n=12 Minimum link rate 24000 bps
      n=2  Xon/Xoff Chars Filtered           n=13 Minimum link rate 26400 bps
      n=3  HP Enq/Ack Host Mode              n=14 Minimum link rate 28800 bps
      n=4  HP Enq/Ack Terminal Mode          n=15 Minimum link rate 31200 bps
      n=5  Xon/Xoff for non-ARQ Mode         n=16 Minimum link rate 33600 bps
&Kn   n=0  Disable Data Compression          n=17 Minimum link rate 28000 bps
      n=1  Auto Data Compression             n=18 Minimum link rate 29333 bps
      n=2  Enable Data Compression           n=19 Minimum link rate 30666 bps
      n=3  Selective Data Compression        n=20 Minimum link rate 32000 bps
&Mn   n=0  Normal Mode                       n=21 Minimum link rate 33333 bps
      n=4  ARQ/Normal Mode                   n=22 Minimum link rate 34666 bps
      n=5  ARQ Mode                          n=23 Minimum link rate 36000 bps
&Nn   n=0  Highest Link Speed                n=24 Minimum link rate 37333 bps
      n=1  300 bps                           n=25 Minimum link rate 38666 bps
      n=2  1200 bps                          n=26 Minimum link rate 40000 bps
      n=3  2400 bps                          n=27 Minimum link rate 41333 bps
      n=4  4800 bps                          n=28 Minimum link rate 42666 bps
      n=5  7200 bps                          n=29 Minimum link rate 44000 bps
      n=6  9600 bps                          n=30 Minimum link rate 45333 bps
      n=7  12000 bps                         n=31 Minimum link rate 46666 bps
      n=8  14400 bps                         n=32 Minimum link rate 48000 bps
      n=9  16800 bps                         n=33 Minimum link rate 49333 bps
      n=10 19200 bps                         n=34 Minimum link rate 50666 bps
      n=11 21600 bps                         n=35 Minimum link rate 52000 bps
      n=12 24000 bps                         n=36 Minimum link rate 53333 bps
      n=13 26400 bps                         n=37 Minimum link rate 54666 bps
      n=14 28800 bps                         n=38 Minimum link rate 56000 bps
      n=15 31200 bps                         n=39 Minimum link rate 57333 bps
      n=16 33600 bps                   &Wn   n=0  Store Configuration 0   
      n=17 28000 bps                         n=1  Store Configuration 1   
      n=18 29333 bps                   &Yn   n=0  Destructive             
      n=19 30666 bps                         n=1  Destructive/Expedited   
      n=20 32000 bps                         n=2  Nondest./Expedited      
      n=21 33333 bps                         n=3  Nondest./Unexpedited    
      n=22 34666 bps                   &Zn=s Store Phone Number           
      n=23 36000 bps                   &Zn?  Query Phone Number           
      n=24 37333 bps                   
      n=25 38666 bps                   #CID=n                             
      n=26 40000 bps                         n=0  Caller ID Off              
      n=27 41333 bps                         n=1  Formatted Caller ID         
      n=28 42666 bps                         n=2  Unformatted Caller ID       
      n=29 44000 bps                   
      n=30 45333 bps                   
      n=31 46666 bps                   
      n=32 48000 bps                   
      n=33 49333 bps                   
      n=34 50666 bps                   
      n=35 52000 bps                   
      n=36 53333 bps                   
      n=37 54666 bps                   
      n=38 56000 bps                   
      n=39 57333 bps                   
&Pn   n=0  Pulse Dial Disabled
      n=1  Austria,Czech.,Denmark,
           Finland,Germany,Italy
           Netherlands,Switzerland,U.S.
           (2nd option for Asia,France,)
           (Korea,Norway,S. Africa)
      n=2  Australia,Asia,Belgium
           France,Ireland,Korea
           Portugal,S. Africa,Spain,U.K.
           (2nd option for Austria,)
           (Denmark,Germany,Japan,US)
      n=3  Norway
      n=4  New Zealand
      n=5  Japan
      n=6  Sweden
      n=7  (2nd option for Australia)

OK
*** Nos ha soltado unas buenas parrafadas... He de mencionar que he modificado 
un poco la salida para que cuadre con el formato de la ezine.

Como vemos, si los comandos preceden de A> en vez de AT, estos se repiten en 
plan bucle infinito y si enviamos A/ se repite el ultimo comando.

El comando In me ha llamado la atencion, lo probare...

ATI1
2D9F

OK
ATI2
OK

OK
ATI3
U.S. Robotics 56K Message Rev. 14.9.1

OK
ATI5
U.S. Robotics 56K Message Profile Settings...

 Template Y0

   DIAL=TONE   B0  E1  F1  L2  M1  Q0  V1  X4
   SPEED=57600  PARITY=N  WORDLEN=8

   &A3  &B1  &C1  &D2  &H1  &I0  &K1  &M4  &N0
   &P0  &R2  &S0  &T5  &U0  &Y1

   S00=000  S02=043  S03=013  S04=010  S05=008  S06=004  S07=060
   S08=002  S09=006  S10=014  S11=072  S12=050  S13=000  S15=000
   S19=000  S21=010  S22=017  S23=019  S25=005  S27=001  S28=008
   S29=020  S30=000  S31=128  S32=002  S33=000  S34=000  S35=000
   S36=014  S38=000  S39=012  S40=000  S41=004  S42=000

Strike a key when ready . . .


 Template Y1

   DIAL=TONE   B0  E1  F1  L2  M1  Q0  V1  X4
   SPEED=115200  PARITY=N  WORDLEN=8

   &A3  &B1  &C1  &D2  &H2  &I2  &K1  &M4  &N0
   &P0  &R1  &S0  &T5  &U0  &Y1

   S00=000  S02=043  S03=013  S04=010  S05=008  S06=004  S07=060
   S08=002  S09=006  S10=014  S11=072  S12=050  S13=000  S15=000
   S19=000  S21=010  S22=017  S23=019  S25=005  S27=001  S28=008
   S29=020  S30=000  S31=128  S32=002  S33=000  S34=000  S35=000
   S36=014  S38=000  S39=012  S40=000  S41=004  S42=000

   STORED PHONE #0: 
                #1: 
                #2: 
                #3: 

OK
ATI6
U.S. Robotics 56K Message Link Diagnostics...

Chars sent                    0      Chars Received                0
Chars lost                    0
Octets sent                   0      Octets Received               0
Blocks sent                   0      Blocks Received               0
Blocks resent                 0

Retrains Requested            0      Retrains Granted              0
Line Reversals                0      Blers                         0
Link Timeouts                 0      Link Naks                     0

Data Compression       NONE
Equalisation           Long
Fallback               Enabled
Last Call              00:00:00

No Connection

OK
ATI7
Configuration Profile...

Product type           CTR-21 External
Product ID:            24566801
Options                V32bis,V.80,V.34+,x2,V.90
Fax Options            Class 1/Class 2.0
Line Options           Caller ID
Voice Options          Speakerphone, TAD
Clock Freq             92.0Mhz
EPROM                  256k
RAM                    32k

FLASH date             2/26/99
FLASH rev              14.9.1

DSP date               2/26/99
DSP rev                14.9.1

OK
ATI8
Blacklist
Time: 00:41:02
Dialed Numbers: Inactive
Dial Attempts:  Inactive

OK
ATI9
(1.0USR0088\\Modem\USR9100\U.S. Robotics 56K Message)FF

OK
ATI10
ERROR
ATI11
U.S. Robotics 56K Message Link Diagnostics...


Modulation                  Unknown Speed
Carrier Freq     (Hz)       
Symbol Rate                 
Trellis Code                
Nonlinear Encoding          
Precoding                   
Shaping                     
Preemphasis      (-dB)      
Recv/Xmit Level  (-dBm)     
Near Echo Loss   (dB)       
Far Echo Loss    (dB)       
Carrier Offset   (Hz)       
Round Trip Delay (msec)     
Timing Offset    (ppm)      
SNR              (dB)       
Speed Shifts Up/Down        0/0
Status :                    

OK
ATI12
ERROR
*** Podria seguir probando, pero no tengo ganas...

Parece ser que ATI8 no salia en las instrucciones... blacklist, curioso.

Bien, muchos ATI's de estos parece que no devuelven demasiada informacion... 
Quiza ejecutandolos con una conexion establecida? Y bien, como se hace eso?
Pues usando el codigo de escape (+++)
Basicamente, consiste en introducir +++COMANDO, por ejemplo, +++ATI11.
Algunos lectores estaran teniendo ya malas ideas... si amigos, hay un DoS para 
modems que consiste en esto, en hacer que la victima mande hacia el modem un 
+++ATH0 para colgar XD, para ello podemos meterlo en un ICMP incluso en el irc 
basta con ponerlo como cadena de ping estilo: 

/ctcp feo PING :+++ATH0

Por suerte la mayoria de los modems permiten ignorar el +++ y lo hacen, solo 
algunos modems cutres son vulnerables a este DoS. Hay que mencionar que he 
probado este ataque con exito con un amigo que tiene un modem cutre y funciona 
de maravilla. Por cierto, recordad que, por logica, si vuestro modem es 
vulnerable os caeis vosotros en vez de la victima :)

Para parchearnos basta ajustar los registros correspondientes para cambiar el 
caracter o el numero de caracteres de escape necesarios, o para desactivarlo 
si el modem lo permite. Una buena idea seria dejarlo grabado en el modem (si 
este lo permite) o engancharlo a los scripts de conexion del pppd.

Voy a ver que pasa cuando me llaman...

ATDT020;
OK
ATZ
OK

RING

RING

*** Ring! Ring! Una onomatopeya: que bonito. El 020 en mi pueblo es la 
rellamada: Hace sonar el telefono despues de unos segundos...

ATA
NO CARRIER

*** Con ATA descuelga y intenta establecer una conexion con el supuesto modem 
que marca. Al no conseguirlo nos muestra "NO CARRIER" y cuelga.

Bien, intentemos hacer algo util con las llamadas de datos que recibimos.

# Example how to put a getty on a modem line.
#
T3:23:respawn:/sbin/mgetty -x0 -s 57600 ttyS3

*** Cogido del /etc/inittab de mi debian :)

Con esto ofreceremos "login" a aquellos que llamen a nuestro modem con su 
terminal o emulador de terminal (ATDTnuestronumdetelefono) :)

mgetty se puede instalar via apt en Debian. Tambien hay un mgetty-fax y un 
mgetty-voice para modems que soporten estas funciones.

Evidentemente que tambien podemos ofrecer PPP o SLIP a los que llamen para 
darles acceso a nuestra red local o ofrecerles acceso a internet si disponemos 
de el a traves de otro interface ;) Pero no tengo ni idea de como se monta 
esto, asi que de momento no hablare de ello, quiza otro dia investigue un poco 
mas y escriba un articulo con nombre "Como montar un ISP en casa".

ATS11? 
072

Me ha parecido interesante este registro, pues con el podemos ajustar la 
duracion de los tonos multifrecuencia, y asi acelerar mucho la marcacion.

Aqui finalizo este articulo, que espero que sea de utilidad. Me gusta dar 
siempre una bibliografia con las fuentes de donde he sacado la informacion de 
lo que escribo, pero esta vez solo he usado el manual de mi "U.S. Robotics 56K 
Message" y la ayuda que el propio modem proporciona.

Dejo mucho por explicar para que investigueis un poco: El ajuste del volumen, 
muchos modems soportan identificacion de las llamadas entrantes (Caller ID), 
funciones de autoprueba (AT&T1, AT&T2...)

Bye.

-=(EOF)=-
